package mwt.xml.xdbforms.dblayer.query;

import java.sql.Connection;
import java.sql.ParameterMetaData;
import java.sql.PreparedStatement;
import java.sql.SQLException;

/**
 * Uso un QueryParameterBuilder per inizializzare
 * i parametri di una query (ossia un PreparedStatement).
 * Uso questo pattern per riempire la query
 * a seconda dei tipi dei parametri.
 * @author Gianfranco Murador, Matteo Ferri, Cristian Castiglia
 */
public abstract class QueryParameterBuilder {

    protected Connection connection = null;
    protected PreparedStatement preparedStatement = null;

    /**
     * Metodo obbligatorio del pattern
     * @return oggetto product
     */
    public PreparedStatement getResult() {
        return preparedStatement;
    }

    /**
     * Funzioni di inizializzazione
     * setta la connessione corrente
     * @param c connessione corrente
     */
    public void setCurrentConnection(Connection c) {
        connection = c;
    }

    /**
     * Connessione corrente
     * @return connection
     */
    public Connection getCurrentConnection() {
        if (connection != null) {
            return connection;
        } else {
            throw new RuntimeException("QueryParameterBuilder: current connection is null");
        }
    }

    /**
     * Ritorna l'operazione sql corrente da costruire
     */

    public abstract SQLOperation getOperation();

    /**
     * inizializza lo statemente richiesto
     */

    public abstract void initializeStatement();

    /**
     * Ritorna i meta dati dei parametri secondo
     * l'interfaccia fornita da JDBC 
     */
    public abstract ParameterMetaData getParameterMetaData();

    /**
     * Setta il contentuo del parametro definito tramite
     * template
     * @param parameterIndex indice del parametro
     * @param x valore da inserire
     * @throws java.sql.SQLException
     */
    public abstract void addParameterValue(int parameterIndex, Object x) throws SQLException;
}
